package com.community.common.service;

import com.community.common.pojo.constant.WeChatConstant;
import com.community.common.util.WxUtil;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Map;

/**
 * 微信消息服务实现类
 * Created by Enzo Cotter on 2020/9/20.
 */
@Service
@AllArgsConstructor
public class MyWXService {

    public String processRequest(HttpServletRequest request) {
        // session
        HttpSession session = request.getSession();
        // xml格式的消息数据
        String respXml = null;
        // 默认返回的文本消息内容
        String respContent;

        // 调用parseXml方法解析请求消息
        Map<String, String> requestMap = null;
        try {
            requestMap = WxUtil.parseXml(request);
            // 消息类型
            String msgType = (String) requestMap.get(WeChatConstant.MsgType);
            String mes = null;

            // 事件推送
            if (msgType.equals(WeChatConstant.REQ_MESSAGE_TYPE_EVENT)) {
                // 事件类型
                String eventType = (String) requestMap.get(WeChatConstant.Event);
                // 关注
                if (eventType.equals(WeChatConstant.EVENT_TYPE_SUBSCRIBE)) {
                    respContent = "谢谢您的关注！";
                    respXml = WxUtil.sendTextMsg(requestMap, respContent);
                }
                // 取消关注
                else if (eventType.equals(WeChatConstant.EVENT_TYPE_UNSUBSCRIBE)) {
                    // TODO 取消订阅后用户不会再收到公众账号发送的消息，因此不需要回复
                }
                // 扫描带参数二维码
                else if (eventType.equals(WeChatConstant.EVENT_TYPE_SCAN)) {
                    // TODO 处理扫描带参数二维码事件
                }
                // 上报地理位置
                else if (eventType.equals(WeChatConstant.EVENT_TYPE_LOCATION)) {
                    // TODO 处理上报地理位置事件
                }
                // 自定义菜单
                else if (eventType.equals(WeChatConstant.EVENT_TYPE_CLICK)) {
                    // TODO 处理菜单点击事件
                }
            }
            mes = mes == null ? "不好意思，不明白您的意思" : mes;
            if (respXml == null) {
                respXml = WxUtil.sendTextMsg(requestMap, mes);
            }
            System.out.println(respXml);
            return respXml;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return "";
    }
}
